Non-volatile memory systems, such as flash memory, have been widely adopted for use in consumer products. Flash memory may be found in different forms, for example in the form of a portable memory card that can be carried between host devices or as a solid state disk (SSD) embedded in a host device. Flash memory is often made up of groups of memory cells referred to as pages, and multiple pages are often then organized in groups known as blocks. Flash memory cells may be physically configured to store data in different bit per cell levels. Binary flash, also known as single level cell (SLC) flash memory is configured to store 1 data bit per cell. Multi-level cell (MLC) flash memory may be configured to store 2 or more data bits per cell. Generally speaking, while higher density MLC memory can hold more data than SLC memory, the endurance and speed of flash memory tend to go down as the bit-per-cell level increases.
After data is written to a block in memory, some of that data may become obsolete over time when updated versions of that data are later written by a host to other blocks in the non-volatile memory, or when the host identifies certain data is now obsolete. At specified intervals, or in response to certain criteria being met, a non-volatile memory system may perform maintenance operations, such as garbage collection operations, to identify a block with valid and obsolete data and move the valid data remaining in the identified block to another block. The originally identified block may then be recycled for use by the memory system. In non-volatile memory systems where blocks of data with differing frequency of update are managed as a single population, obsolete data can become “trapped” in cold blocks which very rarely experience maintenance operations. When this happens, performance and endurance can suffer due to the greater burden on the remaining active blocks.